package utils

import (
	"bytes"
	"fmt"
	"reflect"
)

// 将数组拼接为字符串
func GBStringJoinArgs(sep string, args ...interface{}) string {
	var buff bytes.Buffer
	for i, v := range args {
		buff.WriteString(fmt.Sprint(v))
		if i < len(args) - 1 {
			buff.WriteString(sep)
		}
	}
	return buff.String()
}

// 将 数组/切片 拼接为字符串
func GBStringJoinAuto(sep string, sliceOrArray interface{}) string {
	if sliceOrArray == nil {
		return ""
	}
	// 反射值
	argsValue := reflect.ValueOf(sliceOrArray)
	// 目前只识别以下类型
	if argsValue.Kind() == reflect.Slice || argsValue.Kind() == reflect.Array {
		// 准备拼接
		var buff bytes.Buffer
		// 取得长度
		count := argsValue.Len()
		// 拼接所有
		for i := 0; i < count; i ++ {
			// 当前值
			v := argsValue.Index(i)
			// 添加
			buff.WriteString(fmt.Sprint(v.Interface()))
			// 分隔符
			if i < count - 1 {
				buff.WriteString(sep)
			}
		}
		// 成功
		return buff.String()
	}
	// 其他类型暂不识别
	return ""
}
